package logger

import (
	"os"

	"github.com/sirupsen/logrus"
)

// Logger 日志记录器接口
type Logger interface {
	Debug(args ...interface{})
	Info(args ...interface{})
	Warn(args ...interface{})
	Error(args ...interface{})
	Fatal(args ...interface{})
	WithField(key string, value interface{}) Logger
	WithFields(fields map[string]interface{}) Logger
	WithError(err error) Logger
}

// logrusLogger logrus实现的日志记录器
type logrusLogger struct {
	*logrus.Logger
	entry *logrus.Entry
}

// New 创建新的日志记录器
func New(debug bool) Logger {
	logger := logrus.New()
	
	// 设置输出到标准错误流
	logger.SetOutput(os.Stderr)
	
	// 设置日志级别
	if debug {
		logger.SetLevel(logrus.DebugLevel)
	} else {
		logger.SetLevel(logrus.InfoLevel)
	}
	
	// 设置日志格式
	logger.SetFormatter(&logrus.TextFormatter{
		FullTimestamp: true,
		TimestampFormat: "2006-01-02 15:04:05",
	})
	
	return &logrusLogger{
		Logger: logger,
		entry:  logrus.NewEntry(logger),
	}
}

// Debug 记录调试级别日志
func (l *logrusLogger) Debug(args ...interface{}) {
	l.entry.Debug(args...)
}

// Info 记录信息级别日志
func (l *logrusLogger) Info(args ...interface{}) {
	l.entry.Info(args...)
}

// Warn 记录警告级别日志
func (l *logrusLogger) Warn(args ...interface{}) {
	l.entry.Warn(args...)
}

// Error 记录错误级别日志
func (l *logrusLogger) Error(args ...interface{}) {
	l.entry.Error(args...)
}

// Fatal 记录致命错误级别日志并退出程序
func (l *logrusLogger) Fatal(args ...interface{}) {
	l.entry.Fatal(args...)
}

// WithField 添加单个字段到日志条目
func (l *logrusLogger) WithField(key string, value interface{}) Logger {
	return &logrusLogger{
		Logger: l.Logger,
		entry:  l.entry.WithField(key, value),
	}
}

// WithFields 添加多个字段到日志条目
func (l *logrusLogger) WithFields(fields map[string]interface{}) Logger {
	return &logrusLogger{
		Logger: l.Logger,
		entry:  l.entry.WithFields(fields),
	}
}

// WithError 添加错误信息到日志条目
func (l *logrusLogger) WithError(err error) Logger {
	return &logrusLogger{
		Logger: l.Logger,
		entry:  l.entry.WithError(err),
	}
}